;Luis Angel Dionicio Kuri - 200915133
;Archivo principal para load
;Proyecto IA1

(defglobal
	?*ban1* = "" ;jugadores baneados 1 - 6
	?*ban2* = ""
	?*ban3* = ""
	?*ban4* = ""
	?*ban5* = ""
	?*ban6* = ""
	?*equipo* = "" ;Equipo al que pertenece
	?*posicion* = -1 ;Posicion del equipo al que pertenece
	?*posAux* = 0 ;Posicion auxiliar a elegir del usuario
	?*camSel* =  "" ;campeon escogido temporal
	?*rolSel* = "" ;rol del campeon escogido temporal
	?*temp2* = "" ;rol 1 para seleccionar
	?*temp3* = "" ;rol 2 para seleccionar
	?*p11* = 0 ;posicion top
	?*p21* = 0
	?*p12* = 0 ;posicion mid
	?*p22* = 0
	?*p13* = 0 ;posicion adc
	?*p23* = 0
	?*p14* = 0 ;posicion support
	?*p24* = 0
	?*p15* = 0 ;posicion jungler
	?*p25* = 0	
	?*azul1* = "" ;Campeones equipo azul
	?*azul2* = ""
	?*azul3* = ""
	?*azul4* = ""
	?*azul5* = ""
	?*rojo1* = "" ;Campeones equipo rojo
	?*rojo2* = ""
	?*rojo3* = ""
	?*rojo4* = ""
	?*rojo5* = ""
	?*jugador* = ""
	?*mayor* = 0 ;variable aux para saber el mayor y mejor
	?*numSugerencias* = 0 ;numero de sugerencias hechas
	?*resultado* = "" ;resultado de la batalla
	?*index* = 0 ;para que no se repita
)

(deftemplate campeon "Atributos de campeon"
	(slot nombre)
	(slot principal) (slot secundario)	
	(slot vida)	(slot ataque)
	(slot magia) (slot dificultad)	
	(multislot debil) (multislot fuerte) (multislot bueno)
	(slot permitido 
		(default 0))
	(slot prioridadA 
		(default 0))
	(slot prioridadR
		(default 0))
	(slot prioridad
		(default 0))
)

(deffunction Verificar(?campeon)	;verificar si el campeon existe o esta disponible
	(progn$ (?campeones (get-fact-list))
		(if 
			(eq (fact-relation ?campeones) campeon)
		then 
			(bind ?temp (fact-slot-value ?campeones nombre))
			(bind ?temp2 (fact-slot-value ?campeones permitido))
			(if 
				(and (eq ?temp ?campeon) (= ?temp2 0)) 
			then 
				(return TRUE)
			)
		)
	)
)

(deffunction VerificarRol(?campeon)	;verificar si el rol ingresado es válido
	(progn$ (?campeones (get-fact-list))
		(if 
			(eq (fact-relation ?campeones) campeon)
		then 
			(bind ?temp (fact-slot-value ?campeones nombre))
			(if (eq ?temp ?campeon) 
			then 
				(bind ?*temp2* (fact-slot-value ?campeones principal))
				(bind ?*temp3* (fact-slot-value ?campeones secundario))
				(if
					(or (eq ?*temp2* ?*rolSel*) 
						(eq ?*temp3* ?*rolSel*))
				then
					(return TRUE)
				)
			else
				(if (eq ?temp ?campeon) 
				then 
					(bind ?*temp2* (fact-slot-value ?campeones principal))
					(bind ?*temp3* (fact-slot-value ?campeones secundario))
				)
			)
		)
	)
)

(deffunction ExistenciaBan(?campeon)	;verificar si el campeon puede ser baneado
	(progn$ (?campeones (get-fact-list))
		(if 
			(eq (fact-relation ?campeones) campeon)
		then
			(bind ?temp (fact-slot-value ?campeones nombre))
			(if 
				(and (eq ?temp ?campeon)
					(not (= (str-compare ?temp ?*ban1*) 0)) (not(= (str-compare ?temp ?*ban2*) 0)) 
					(not (= (str-compare ?temp ?*ban3*) 0)) (not(= (str-compare ?temp ?*ban4*) 0)) 
					(not (= (str-compare ?temp ?*ban5*) 0)) (not(= (str-compare ?temp ?*ban6*) 0))
				)
			then 
				(return TRUE)
			)
		)
	)
)

(deffunction MostrarRoles(?color) ;mostrar roles disponibles para el equipo
	(if (eq ?color "azul")
	then
		(printout t "*NOTA -- Roles disponibles: ")
		(if (= ?*p11* 0) ;no eligieron top
		then
			(printout t " - Fighter - Tank - Assasin")
		else
			(if (= ?*p15* 0) ;con top pero sin Jungler
			then
				(printout t " - Fighter - Assasin")
			)
		)
		(if (= ?*p12* 0) ;no eligieron Mid
		then
			(printout t " - Mage")
		)
		(if (= ?*p13* 0) ;no eligieron ADC
		then
			(printout t " - Marksman")
		)
		(if (= ?*p14* 0) ;no eligieron Support
		then
			(printout t " - Support")
		)
	)
	(if (eq ?color "rojo")
	then
		(printout t "*NOTA -- Roles disponibles: ")
		(if (= ?*p21* 0) ;no eligieron top
		then
			(printout t " - Fighter - Tank - Assasin")
		else
			(if (= ?*p25* 0) ;con top pero sin Jungler
			then
				(printout t " - Fighter - Assasin")
			)
		)
		(if (= ?*p22* 0) ;no eligieron Mid
		then
			(printout t " - Mage")
		)
		(if (= ?*p23* 0) ;no eligieron ADC
		then
			(printout t " - Marksman")
		)
		(if (= ?*p24* 0) ;no eligieron Support
		then
			(printout t " - Support")
		)
	)
	(printout t crlf)
)

(deffunction ObtenerMayor(?rol) ;obtenemos el mejor por su ataque, vida o magia
	(progn$ (?campeones (get-fact-list))
		(if 
			(eq (fact-relation ?campeones) campeon)
		then 
			(bind ?temp (fact-slot-value ?campeones nombre))
			(bind ?temp2 (fact-slot-value ?campeones permitido))
			(bind ?temp3 (fact-slot-value ?campeones principal))
			(bind ?temp4 (fact-slot-value ?campeones secundario))
			(bind ?ataque (fact-slot-value ?campeones ataque))
			(bind ?vida (fact-slot-value ?campeones vida))
			(bind ?magia (fact-slot-value ?campeones magia))
			(if 
				(and (= ?temp2 0)
					(or (eq ?temp3 ?rol) (eq ?temp4 ?rol)) 
				) 
			then
				(if (or (eq ?rol "Marksman") (eq ?rol "Fighter") );mejor ataque
				then	
					(if (> ?ataque ?*mayor*)
					then
						(bind ?*mayor* ?ataque)
					)
				)
				(if (or (eq ?rol "Assassin") (eq ?rol "Mage") );mejor magia
				then	
					(if (> ?magia ?*mayor*)
					then
						(bind ?*mayor* ?magia)
					)
				)
				(if (or (eq ?rol "Tank") (eq ?rol "Support") );mejor vida
				then	
					(if (> ?vida ?*mayor*)
					then
						(bind ?*mayor* ?vida)
					)
				)
			)
		)
	)
)

(deffunction ObtenerMejorA(?rol) ;obtenemos el mejor por su prioridadA
	(progn$ (?campeones (get-fact-list))
		(if 
			(eq (fact-relation ?campeones) campeon)
		then 
			(bind ?temp (fact-slot-value ?campeones nombre))
			(bind ?temp2 (fact-slot-value ?campeones permitido))
			(bind ?temp3 (fact-slot-value ?campeones principal))
			(bind ?temp4 (fact-slot-value ?campeones secundario))
			(bind ?prioridadA (fact-slot-value ?campeones prioridadA))
			(if 
				(and (= ?temp2 0)
					(or (eq ?temp3 ?rol) (eq ?temp4 ?rol)) 
				) 
			then
				(if (> ?prioridadA ?*mayor*)
				then
					(bind ?*mayor* ?prioridadA)
				)
			)
		)
	)
)

(deffunction ObtenerMejorR(?rol) ;obtenemos el mejor por su prioridadA
	(progn$ (?campeones (get-fact-list))
		(if 
			(eq (fact-relation ?campeones) campeon)
		then 
			(bind ?temp (fact-slot-value ?campeones nombre))
			(bind ?temp2 (fact-slot-value ?campeones permitido))
			(bind ?temp3 (fact-slot-value ?campeones principal))
			(bind ?temp4 (fact-slot-value ?campeones secundario))
			(bind ?prioridadR (fact-slot-value ?campeones prioridadR))
			(if 
				(and (= ?temp2 0)
					(or (eq ?temp3 ?rol) (eq ?temp4 ?rol)) 
				) 
			then
				(if (> ?prioridadR ?*mayor*)
				then
					(bind ?*mayor* ?prioridadR)
				)
			)
		)
	)
)

(deffunction Sugerencia1(?rol) ;Sugerencias cuando somos azul 1
	(progn$ (?campeones (get-fact-list))
		(if 
			(eq (fact-relation ?campeones) campeon)
		then 
			(bind ?temp (fact-slot-value ?campeones nombre))
			(bind ?temp2 (fact-slot-value ?campeones permitido))
			(bind ?temp3 (fact-slot-value ?campeones principal))
			(bind ?temp4 (fact-slot-value ?campeones secundario))
			(bind ?ataque (fact-slot-value ?campeones ataque))
			(bind ?vida (fact-slot-value ?campeones vida))
			(bind ?magia (fact-slot-value ?campeones magia))
			(if 
				(and (= ?temp2 0) (< ?*numSugerencias* 3)
					(or (eq ?temp3 ?rol) (eq ?temp4 ?rol)) 
				) 
			then
				(if (or (eq ?rol "Marksman") (eq ?rol "Fighter") );mejor ataque
				then	
					(if (= ?ataque ?*mayor*)
					then
						(bind ?*numSugerencias* (+ ?*numSugerencias* 1))
						(printout t ?*numSugerencias* ". " ?temp " - ataque: " ?ataque crlf)
					)
				)
				(if (or (eq ?rol "Assassin") (eq ?rol "Mage") );mejor magia
				then	
					(if (= ?magia ?*mayor*)
					then
						(bind ?*numSugerencias* (+ ?*numSugerencias* 1))
						(printout t ?*numSugerencias* ". " ?temp " - magia: " ?magia crlf)
					)
				)
				(if (or (eq ?rol "Tank") (eq ?rol "Support") );mejor vida
				then	
					(if (> ?vida ?*mayor*)
					then
						(bind ?*numSugerencias* (+ ?*numSugerencias* 1))
						(printout t ?*numSugerencias* ". " ?temp " - vida: " ?vida crlf)
					)
				)
			)
		)
	)
)

(deffunction SugerenciaA(?rol) ;sugerencias si somos del equipo azul
	(progn$ (?campeones (get-fact-list))
		(if 
			(eq (fact-relation ?campeones) campeon)
		then 
			(bind ?temp (fact-slot-value ?campeones nombre))
			(bind ?temp2 (fact-slot-value ?campeones permitido))
			(bind ?temp3 (fact-slot-value ?campeones principal))
			(bind ?temp4 (fact-slot-value ?campeones secundario))
			(bind ?prioridadA (fact-slot-value ?campeones prioridadA))
			(if 
				(and (= ?temp2 0) (< ?*numSugerencias* 3)
					(or (eq ?temp3 ?rol) (eq ?temp4 ?rol)) 
				) 
			then
				(if (= ?*mayor* ?prioridadA)
				then
					(bind ?*numSugerencias* (+ ?*numSugerencias* 1))
					(printout t ?*numSugerencias* ". " ?temp " - prioridad: " ?prioridadA crlf)
				)
			)
		)
	)
)

(deffunction SugerenciaR(?rol) ;sugerencias si somos del equipo rojo
	(progn$ (?campeones (get-fact-list))
		(if 
			(eq (fact-relation ?campeones) campeon)
		then 
			(bind ?temp (fact-slot-value ?campeones nombre))
			(bind ?temp2 (fact-slot-value ?campeones permitido))
			(bind ?temp3 (fact-slot-value ?campeones principal))
			(bind ?temp4 (fact-slot-value ?campeones secundario))
			(bind ?prioridadR (fact-slot-value ?campeones prioridadR))
			(if 
				(and (= ?temp2 0) (< ?*numSugerencias* 3)
					(or (eq ?temp3 ?rol) (eq ?temp4 ?rol)) 
				) 
			then
				(if (= ?*mayor* ?prioridadR)
				then
					(bind ?*numSugerencias* (+ ?*numSugerencias* 1))
					(printout t ?*numSugerencias* ". " ?temp " - prioridad: " ?prioridadR crlf)
				)
			)
		)
	)
)

(deffunction IngresarAzul(?num) ;funcion para ingresar un campeón al equipo Azul
	(if 
		(and (= (str-compare ?*equipo* "azul") 0) (= ?*posicion* ?num))
	then
		(printout t crlf crlf)
		(printout t "------------- SU TURNO! Jugador " ?num " - Equipo Azul ---------------" crlf)
		;MOSTRAMOS LOS ROLES DISPONIBLES PARA LOS JUGADORES
		(MostrarRoles "azul")		
		(printout t crlf "Por favor ingresar el rol del campeon que se utilizara: " crlf)
		(bind ?*rolSel*(readline))
		(printout t crlf "------------- SUGERENCIAS DE CAMPEONES ---------------" crlf)
		;empezamos con las sugerencias
		(if (= ?num 1)
		then
			(ObtenerMayor ?*rolSel*)
			(Sugerencia1 ?*rolSel*)
			(while (< ?*numSugerencias* 3)
				(bind ?*mayor* (- ?*mayor* 1))
				(Sugerencia1 ?*rolSel*)
			)
		else
			(ObtenerMejorA ?*rolSel*)
			(SugerenciaA ?*rolSel*)
			(while (< ?*numSugerencias* 3)
				(bind ?*mayor* (- ?*mayor* 1))
				(SugerenciaA ?*rolSel*)
			)
		)
		(printout t crlf "Por favor ingrese el nombre del campeon a elegir: " crlf)
		(bind ?*camSel*(readline))
		(while (not (Verificar ?*camSel*))
			(printout t "ATENCION! El campeon ingresado no es valido. Favor de ingresar otro campeon: " crlf)
			(bind ?*camSel* (readline))
			(Verificar ?*camSel*)
		)
		(bind ?*jugador* ?*camSel*)
		(if 
			(or (= (str-compare ?*rolSel* "Fighter") 0) (= (str-compare ?*rolSel* "Assassin") 0))
		then
			(printout t crlf "*NOTA -- Las posiciones disponibles son:" crlf)
			(if (= ?*p11* 0)
			then
				(printout t "1. Top" crlf)
			
			)
			(if (= ?*p15* 0)
			then
				(printout t "2. Jungler" crlf)
			
			)
			(printout t crlf "Escoja una posicion: " crlf)
			(bind ?*posAux* (read))
			(if 
				(= ?*posAux* 1)
			then
				(bind ?*p11* 1) ;marcamos top
				(printout t crlf "Su posicion es Top." crlf)
			else
				(bind ?*p15* 1) ;marcamos Jungler
				(printout t crlf "Su posicion es Jungler." crlf)
			)
		)
		(if
			(= (str-compare ?*rolSel* "Mage") 0)
		then
			(bind ?*p12* 1) ; marcamos Mid
			(printout t crlf "Su posicion es Mid." crlf)
		)
		(if
			(= (str-compare ?*rolSel* "Marksman") 0)
		then
			(bind ?*p13* 1) ; marcamos ADC
			(printout t crlf "Su posicion es ADC." crlf)
		)
		(if
			(= (str-compare ?*rolSel* "Support") 0)
		then
			(bind ?*p14* 1) ; marcamos Support
			(printout t crlf "Su posicion es Support." crlf)
		)
		(if
			(= (str-compare ?*rolSel* "Tank") 0)
		then
			(bind ?*p11* 1) ; marcamos Top 
			(printout t crlf "Su posicion es Top." crlf)
		)
	else
		(printout t crlf crlf)
		(printout t "------------------ Jugador " ?num " - Equipo Azul ------------------" crlf)
		;MOSTRAMOS LOS ROLES DISPONIBLES PARA LOS JUGADORES
		(MostrarRoles "azul")
		(printout t crlf "Por favor ingrese el nombre del campeon a elegir: " crlf)
		(bind ?*camSel*(readline))
		(while (not (Verificar ?*camSel*))
			(printout t "ATENCION! El campeon ingresado no es valido. Favor de ingresar otro campeon: " crlf)
			(bind ?*camSel* (readline))
			(Verificar ?*camSel*)
		)
		(printout t crlf "Por favor rol del campeon elegido:" crlf)
		(bind ?*rolSel*(read))
		;VERIFICAMOS SI EL ROL COINCIDE
		(while (not (VerificarRol ?*camSel*))
			(printout t "Los roles disponibles para este campeon son: " ?*temp2* " y " ?*temp3* crlf)
			(printout t "ATENCION! El rol no corresponde al campeon. Favor escoger uno valido: " crlf)
			(bind ?*rolSel* (readline))
			(VerificarRol ?*camSel*)
		)
		(if 
			(or (= (str-compare ?*rolSel* "Fighter") 0) (= (str-compare ?*rolSel* "Assassin") 0))
		then
			(printout t crlf "*NOTA -- Las posiciones disponibles son:" crlf)
			(if (= ?*p11* 0)
			then
				(printout t "1. Top" crlf)
			
			)
			(if (= ?*p15* 0)
			then
				(printout t "2. Jungler" crlf)
			
			)
			(printout t crlf "Escoja una posicion: " crlf)
			(bind ?*posAux* (read))
			(if 
				(= ?*posAux* 1)
			then
				(bind ?*p11* 1) ;marcamos top
				(printout t crlf "Su posicion es Top." crlf)
			else
				(bind ?*p15* 1) ;marcamos Jungler
				(printout t crlf "Su posicion es Jungler." crlf)
			)
		)
		(if
			(= (str-compare ?*rolSel* "Mage") 0)
		then
			(bind ?*p12* 1) ; marcamos Mid
			(printout t crlf "Su posicion es Mid." crlf)
		)
		(if
			(= (str-compare ?*rolSel* "Marksman") 0)
		then
			(bind ?*p13* 1) ; marcamos ADC
			(printout t crlf "Su posicion es ADC." crlf)
		)
		(if
			(= (str-compare ?*rolSel* "Support") 0)
		then
			(bind ?*p14* 1) ; marcamos Support
			(printout t crlf "Su posicion es Support." crlf)
		)
		(if
			(= (str-compare ?*rolSel* "Tank") 0)
		then
			(bind ?*p11* 1) ; marcamos Top 
			(printout t crlf "Su posicion es Top." crlf)
		)
	)
)

(deffunction IngresarRojo(?num);funcion para ingresar un campeón al equipo Rojo
	(if 
		(and (= (str-compare ?*equipo* "rojo") 0) (= ?*posicion* ?num))
	then
		(printout t crlf crlf)
		(printout t "------------- SU TURNO! Jugador " ?num " - Equipo Rojo ---------------" crlf)
		;MOSTRAMOS LOS ROLES DISPONIBLES PARA LOS JUGADORES
		(MostrarRoles "rojo")		
		(printout t crlf "Por favor ingresar el rol del campeon que se utilizara: " crlf)
		(bind ?*rolSel*(readline))
		(printout t crlf "------------- SUGERENCIAS DE CAMPEONES ---------------" crlf)
		;empezamos con las sugerencias
		(ObtenerMejorR ?*rolSel*)
		(SugerenciaR ?*rolSel*)
		(while (< ?*numSugerencias* 3) ;verificamos si ya estan las 3 sugerencias
			(bind ?*mayor* (- ?*mayor* 1))
			(SugerenciaR ?*rolSel*)
		)
		(printout t crlf "Por favor ingrese el nombre del campeon a elegir: " crlf)
		(bind ?*camSel*(readline))
		(while (not (Verificar ?*camSel*))
			(printout t "ATENCION! El campeon ingresado no es valido. Favor de ingresar otro campeon: " crlf)
			(bind ?*camSel* (readline))
			(Verificar ?*camSel*)
		)
		(bind ?*jugador* ?*camSel*)
		(if 
			(or (= (str-compare ?*rolSel* "Fighter") 0) (= (str-compare ?*rolSel* "Assassin") 0))
		then
			(printout t crlf "*NOTA -- Las posiciones disponibles son:" crlf)
			(if (= ?*p21* 0)
			then
				(printout t "1. Top" crlf)
			
			)
			(if (= ?*p25* 0)
			then
				(printout t "2. Jungler" crlf)
			
			)
			(printout t crlf "Escoja una posicion: " crlf)
			(bind ?*posAux* (read))
			(if 
				(= ?*posAux* 1)
			then
				(bind ?*p21* 1) ;marcamos top
				(printout t crlf "Su posicion es Top." crlf)
			else
				(bind ?*p25* 1) ;marcamos Jungler
				(printout t crlf "Su posicion es Jungler." crlf)
			)
		)
		(if
			(= (str-compare ?*rolSel* "Mage") 0)
		then
			(bind ?*p22* 1) ; marcamos Mid
			(printout t crlf "Su posicion es Mid." crlf)
		)
		(if
			(= (str-compare ?*rolSel* "Marksman") 0)
		then
			(bind ?*p23* 1) ; marcamos ADC
			(printout t crlf "Su posicion es ADC." crlf)
		)
		(if
			(= (str-compare ?*rolSel* "Support") 0)
		then
			(bind ?*p24* 1) ; marcamos Support
			(printout t crlf "Su posicion es Support." crlf)
		)
		(if
			(= (str-compare ?*rolSel* "Tank") 0)
		then
			(bind ?*p21* 1) ; marcamos Top 
			(printout t crlf "Su posicion es Top." crlf)
		)
	else
		(printout t crlf crlf)
		(printout t "------------------ Jugador " ?num " - Equipo Rojo ------------------" crlf)
		;MOSTRAMOS LOS ROLES DISPONIBLES PARA LOS JUGADORES
		(MostrarRoles "rojo")
		(printout t crlf "Por favor ingrese el nombre del campeon a elegir: " crlf)
		(bind ?*camSel*(readline))
		(while (not (Verificar ?*camSel*))
			(printout t "ATENCION! El campeon ingresado no es valido. Favor de ingresar otro campeon: " crlf)
			(bind ?*camSel* (readline))
			(Verificar ?*camSel*)
		)
		(printout t crlf "Por favor rol del campeon elegido:" crlf)
		(bind ?*rolSel*(read))
		;VERIFICAMOS SI EL ROL COINCIDE
		(while (not (VerificarRol ?*camSel*))
			(printout t "Los roles disponibles para este campeon son: " ?*temp2* " y " ?*temp3* crlf)
			(printout t "ATENCION! El rol no corresponde al campeon. Favor escoger uno valido: " crlf)
			(bind ?*rolSel* (readline))
			(VerificarRol ?*camSel*)
		)
		(if 
			(or (= (str-compare ?*rolSel* "Fighter") 0) (= (str-compare ?*rolSel* "Assassin") 0))
		then
			(printout t crlf "*NOTA -- Las posiciones disponibles son:" crlf)
			(if (= ?*p21* 0)
			then
				(printout t "1. Top" crlf)
			
			)
			(if (= ?*p25* 0)
			then
				(printout t "2. Jungler" crlf)
			
			)
			(printout t crlf "Escoja una posicion: " crlf)
			(bind ?*posAux* (read))
			(if 
				(= ?*posAux* 1)
			then
				(bind ?*p21* 1) ;marcamos top
				(printout t crlf "Su posicion es Top." crlf)
			else
				(bind ?*p25* 1) ;marcamos Jungler
				(printout t crlf "Su posicion es Jungler." crlf)
			)
		)
		(if
			(= (str-compare ?*rolSel* "Mage") 0)
		then
			(bind ?*p22* 1) ; marcamos Mid
			(printout t crlf "Su posicion es Mid." crlf)
		)
		(if
			(= (str-compare ?*rolSel* "Marksman") 0)
		then
			(bind ?*p23* 1) ; marcamos ADC
			(printout t crlf "Su posicion es ADC." crlf)
		)
		(if
			(= (str-compare ?*rolSel* "Support") 0)
		then
			(bind ?*p24* 1) ; marcamos Support
			(printout t crlf "Su posicion es Support." crlf)
		)
		(if
			(= (str-compare ?*rolSel* "Tank") 0)
		then
			(bind ?*p21* 1) ; marcamos Top 
			(printout t crlf "Su posicion es Top." crlf)
		)
	)
)

(defrule Cargar-Facts "Puede ser opcional, ya que se pueden guardar los facts a conveniencia"
	(declare (salience 3001))
=>
	(load-facts "C:/IA/Campeones-Save.lsp") ;archivo que tiene la lista de facts
)

(defrule InicializarFacts "Limpiamos los facts"
	(declare (salience 3000))
	?registro <-(campeon (nombre ?nombre) (prioridad ?prioridad))
	=>
		(if (= ?*index* 0)
			then
				(bind ?*index* (fact-index ?registro))
				(bind ?*index* (+ ?*index* 1))
		)
		(bind ?index (fact-index ?registro))
		(if (<  ?index ?*index*)
			then
				(modify ?registro (permitido 0))
		)
)

(defrule Inicio-Bannear "Bienvenida al programa y banneo de los 6 campeones"
	(declare (salience 2999))
=>
	(printout t crlf crlf)
	(printout t "**********************************************************" crlf)
	(printout t "*                    PROYECTO 1 - IA1                    *" crlf)
	(printout t "*                LUIS ANGEL DIONICIO KURI                *" crlf)
	(printout t "*                        200915133                       *" crlf)
	(printout t "**********************************************************" crlf)
	(printout t "*                League of Legends Counter               *" crlf)
	(printout t "**********************************************************" crlf)
	(printout t crlf crlf)
	(printout t crlf "Por favor ingrese al 1er campeon que desee banear:" crlf)
	(bind ?ban1(readline))
	(while (not (ExistenciaBan ?ban1))
		(printout t "ATENCION! El campeon ingresado no es valido. Favor de ingresar otro campeon: " crlf)
		(bind ?ban1 (readline))
	)
	(bind ?*ban1* ?ban1)
	(printout t crlf "Por favor ingrese al 2do campeon que desee banear:" crlf)
	(bind ?ban2(readline))
	(while (not (ExistenciaBan ?ban2))
		(printout t "ATENCION! El campeon ingresado no es valido. Favor de ingresar otro campeon: " crlf)
		(bind ?ban2 (readline))
	)
	(bind ?*ban2* ?ban2)
	(printout t crlf "Por favor ingrese al 3er campeon que desee banear:" crlf)
	(bind ?ban3(readline))
	(while (not (ExistenciaBan ?ban3))
		(printout t "ATENCION! El campeon ingresado no es valido. Favor de ingresar otro campeon: " crlf)
		(bind ?ban3 (readline))
	)
	(bind ?*ban3* ?ban3)
	(printout t crlf "Por favor ingrese al 4to campeon que desee banear:" crlf)
	(bind ?ban4(readline))
	(while (not (ExistenciaBan ?ban4))
		(printout t "ATENCION! El campeon ingresado no es valido. Favor de ingresar otro campeon: " crlf)
		(bind ?ban4 (readline))
	)
	(bind ?*ban4* ?ban4)
	(printout t crlf "Por favor ingrese al 5to campeon que desee banear:" crlf)
	(bind ?ban5(readline))
	(while (not (ExistenciaBan ?ban5))
		(printout t "ATENCION! El campeon ingresado no es valido. Favor de ingresar otro campeon: " crlf)
		(bind ?ban5 (readline))
	)
	(bind ?*ban5* ?ban5)
	(printout t crlf "Por favor ingrese al 6to campeon que desee banear:" crlf)
	(bind ?ban6(readline))
	(printout t crlf)
	(while (not (ExistenciaBan ?ban6))
		(printout t "ATENCION! El campeon ingresado no es valido. Favor de ingresar otro campeon: " crlf)
		(bind ?ban6 (readline))
	)
	(bind ?*ban6* ?ban6)
)

(defrule Eliminar-baneados "Marcamos los campeones que han sido baneados"
	(declare (salience 2998))
	?registro <-(campeon (nombre ?nombre) (permitido ?permitido))
	=>
		(if (and 
				(or (= (str-compare ?nombre ?*ban1*) 0) (= (str-compare ?nombre ?*ban2*) 0) 
					(= (str-compare ?nombre ?*ban3*) 0) (= (str-compare ?nombre ?*ban4*) 0) 
					(= (str-compare ?nombre ?*ban5*) 0) (= (str-compare ?nombre ?*ban6*) 0)	) 
			(=  ?permitido 0))
		then
			(modify ?registro (permitido -1))
			(printout t "Baneado: nombre " ?nombre crlf)
		)
)

(defrule Jugador-Posicion "Solicitamos información del jugador"
	(declare (salience 2997))
=>
	(printout t crlf crlf)
	(printout t "------------------ Informacion del usuario ------------------" crlf)
	(printout t crlf "Por favor ingrese el nombre del equipo al que pertenece (azul o rojo): ")
	(bind ?*equipo*(read))
	(printout t crlf "Por favor ingrese el numero de jugador del equipo que le corresponda (1-5): ")
	(bind ?*posicion*(read))
	(printout t crlf "Bienvenido jugador " ?*posicion* " del equipo " ?*equipo* ", es tiempo de jugar!" crlf)
	(printout t crlf "=-[~_-¯¯-_~]-==-[~_-¯¯-_~]-==-[~_-¯¯-_~]-==-[~_-¯¯-_~]-==-[~_-¯¯-_~]-==-[~_-¯¯-_~]-=" crlf)
	(printout t crlf)
)

(defrule Jugador1-Azul "Seleccion del Jugador 1 - equipo azul"
	(declare (salience 100))
	=>
		(IngresarAzul 1)
)

(defrule Jugador1-Azul-Asig "Asignamos el campeon del Azul 1"
	(declare (salience 99))
	?registro <-(campeon (nombre ?nombre) (permitido 0))
	=>
		(if
			(= (str-compare ?nombre ?*camSel*) 0)
		then
			(modify ?registro (permitido 1))
			(bind ?*azul1* ?nombre)
			(printout t crlf "Para el jugador 1 del equipo azul, se asigno campeon: " ?*camSel* " rol: " ?*rolSel* crlf)
			(printout t "=-[~_-¯¯-_~]-==-[~_-¯¯-_~]-==-[~_-¯¯-_~]-==-[~_-¯¯-_~]-==-[~_-¯¯-_~]-==-[~_-¯¯-_~]-=" crlf)
			(printout t crlf)
		)
)

(defrule PA1 "Prioridad azul 1"
	(declare (salience 98))
	?registro <-(campeon (nombre ?nombre) (bueno $?bueno) (fuerte $?fuerte) (debil $?debil) (permitido 0) (prioridadA ?prA) (prioridadR ?prR))
	=>
		(if (= ?*index* 0)
			then
				(bind ?*index* (fact-index ?registro))
				(bind ?*index* (+ ?*index* 1))
		)
		(bind ?index (fact-index ?registro))
		(if (<  ?index ?*index*)
			then
			(bind ?cA 0)
			(bind ?cR 0)
			(if (member$ ?*azul1* ?bueno)
				then
					(bind ?cA (+ ?cA 1))
			)
			(if (member$ ?*azul1* ?fuerte)
				then
					(bind ?cR (+ ?cR 1))
			)
			(if (member$ ?*azul1* ?debil)
				then
					(bind ?cR (- ?cR 1))
			)
			(modify ?registro (prioridadA (+ ?prA ?cA)) (prioridadR (+ ?prR ?cR))) ;sumo o resto la prioridad por color
		)
)

(defrule Jugador1-Rojo "Seleccion del Jugador 1 - equipo Rojo"
	(declare (salience 90))
	=>
		(bind ?*index* 0)
		(IngresarRojo 1)
)

(defrule Jugador1-Rojo-Asig "Asignamos el campeon del Rojo 1"
	(declare (salience 89))
	?registro <-(campeon (nombre ?nombre) (permitido 0))
	=>
		(if
			(= (str-compare ?nombre ?*camSel*) 0)
		then
			(modify ?registro (permitido 1))
			(bind ?*rojo1* ?nombre)
			(printout t crlf "Para el jugador 1 del equipo rojo, se asigno campeon: " ?*camSel* " rol: " ?*rolSel* crlf)
			(printout t "=-[~_-¯¯-_~]-==-[~_-¯¯-_~]-==-[~_-¯¯-_~]-==-[~_-¯¯-_~]-==-[~_-¯¯-_~]-==-[~_-¯¯-_~]-=" crlf)
			(printout t crlf)
		)
)
(defrule PR1 "Prioridad rojo 1"
	(declare (salience 88))
	?registro <-(campeon (nombre ?nombre) (bueno $?bueno) (fuerte $?fuerte) (debil $?debil) (permitido 0) (prioridadA ?prA) (prioridadR ?prR))
	=>
		(if (= ?*index* 0)
			then
				(bind ?*index* (fact-index ?registro))
				(bind ?*index* (+ ?*index* 1))
		)
		(bind ?index (fact-index ?registro))
		(if (<  ?index ?*index*)
			then
				(bind ?cA 0)
				(bind ?cR 0)
				(if (member$ ?*rojo1* ?bueno)
					then
						(bind ?cR (+ ?cR 1))
				)
				(if (member$ ?*rojo1* ?fuerte)
					then
						(bind ?cA (+ ?cA 1))
				)
				(if (member$ ?*rojo1* ?debil)
					then
						(bind ?cA (- ?cA 1))
				)
				(modify ?registro (prioridadA (+ ?prA ?cA)) (prioridadR (+ ?prR ?cR))) ;sumo o resto la prioridad por color
		)
)

(defrule Jugador2-Rojo "Seleccion del Jugador 2 - equipo Rojo"
	(declare (salience 80))
	=>
		(bind ?*index* 0)
		(IngresarRojo 2)
)

(defrule Jugador2-Rojo-Asig "Asignamos el campeon del Rojo 2"
	(declare (salience 79))
	?registro <-(campeon (nombre ?nombre) (permitido 0))
	=>
		(if
			(= (str-compare ?nombre ?*camSel*) 0)
		then
			(modify ?registro (permitido 1))
			(bind ?*rojo2* ?nombre)
			(printout t crlf "Para el jugador 2 del equipo rojo, se asigno campeon: " ?*camSel* " rol: " ?*rolSel* crlf)
			(printout t "=-[~_-¯¯-_~]-==-[~_-¯¯-_~]-==-[~_-¯¯-_~]-==-[~_-¯¯-_~]-==-[~_-¯¯-_~]-==-[~_-¯¯-_~]-=" crlf)
			(printout t crlf)
		)
)

(defrule PR2 "Prioridad rojo 2"
	(declare (salience 78))
	?registro <-(campeon (nombre ?nombre) (bueno $?bueno) (fuerte $?fuerte) (debil $?debil) (permitido 0) (prioridadA ?prA) (prioridadR ?prR))
	=>
		(if (= ?*index* 0)
			then
				(bind ?*index* (fact-index ?registro))
				(bind ?*index* (+ ?*index* 1))
		)
		(bind ?index (fact-index ?registro))
		(if (<  ?index ?*index*)
			then
				(bind ?cA 0)
				(bind ?cR 0)
				(if (member$ ?*rojo2* ?bueno)
					then
						(bind ?cR (+ ?cR 1))
				)
				(if (member$ ?*rojo2* ?fuerte)
					then
						(bind ?cA (+ ?cA 1))
				)
				(if (member$ ?*rojo2* ?debil)
					then
						(bind ?cA (- ?cA 1))
				)
				(modify ?registro (prioridadA (+ ?prA ?cA)) (prioridadR (+ ?prR ?cR))) ;sumo o resto la prioridad por color
		)
)

(defrule Jugador2-Azul "Seleccion del Jugador 2 - equipo azul"
	(declare (salience 70))
	=>
		(bind ?*index* 0)
		(IngresarAzul 2)
)

(defrule Jugador2-Azul-Asig "Asignamos el campeon del Azul 2"
	(declare (salience 69))
	?registro <-(campeon (nombre ?nombre) (permitido 0))
	=>
		(if
			(= (str-compare ?nombre ?*camSel*) 0)
		then
			(modify ?registro (permitido 1))
			(bind ?*azul2* ?nombre)
			(printout t crlf "Para el jugador 2 del equipo azul, se asigno campeon: " ?*camSel* " rol: " ?*rolSel* crlf)
			(printout t "=-[~_-¯¯-_~]-==-[~_-¯¯-_~]-==-[~_-¯¯-_~]-==-[~_-¯¯-_~]-==-[~_-¯¯-_~]-==-[~_-¯¯-_~]-=" crlf)
			(printout t crlf)
		)
)

(defrule PA2 "Prioridad azul 2"
	(declare (salience 68))
	?registro <-(campeon (nombre ?nombre) (bueno $?bueno) (fuerte $?fuerte) (debil $?debil) (permitido 0) (prioridadA ?prA) (prioridadR ?prR))
	=>
		(if (= ?*index* 0)
			then
				(bind ?*index* (fact-index ?registro))
				(bind ?*index* (+ ?*index* 1))
		)
		(bind ?index (fact-index ?registro))
		(if (<  ?index ?*index*)
			then
			(bind ?cA 0)
			(bind ?cR 0)
			(if (member$ ?*azul2* ?bueno)
				then
					(bind ?cA (+ ?cA 1))
			)
			(if (member$ ?*azul2* ?fuerte)
				then
					(bind ?cR (+ ?cR 1))
			)
			(if (member$ ?*azul2* ?debil)
				then
					(bind ?cR (- ?cR 1))
			)
			(modify ?registro (prioridadA (+ ?prA ?cA)) (prioridadR (+ ?prR ?cR))) ;sumo o resto la prioridad por color
		)
)

(defrule Jugador3-Azul "Seleccion del Jugador 3 - equipo azul"
	(declare (salience 60))
	=>
		(bind ?*index* 0)
		(IngresarAzul 3)
)

(defrule Jugador3-Azul-Asig "Asignamos el campeon del Azul 3"
	(declare (salience 59))
	?registro <-(campeon (nombre ?nombre) (permitido 0))
	=>
		(if
			(= (str-compare ?nombre ?*camSel*) 0)
		then
			(modify ?registro (permitido 1))
			(bind ?*azul3* ?nombre)
			(printout t crlf "Para el jugador 3 del equipo azul, se asigno campeon: " ?*camSel* " rol: " ?*rolSel* crlf)
			(printout t "=-[~_-¯¯-_~]-==-[~_-¯¯-_~]-==-[~_-¯¯-_~]-==-[~_-¯¯-_~]-==-[~_-¯¯-_~]-==-[~_-¯¯-_~]-=" crlf)
			(printout t crlf)
		)
)

(defrule PA3 "Prioridad azul 3"
	(declare (salience 58))
	?registro <-(campeon (nombre ?nombre) (bueno $?bueno) (fuerte $?fuerte) (debil $?debil) (permitido 0) (prioridadA ?prA) (prioridadR ?prR))
	=>
		(if (= ?*index* 0)
			then
				(bind ?*index* (fact-index ?registro))
				(bind ?*index* (+ ?*index* 1))
		)
		(bind ?index (fact-index ?registro))
		(if (<  ?index ?*index*)
			then
			(bind ?cA 0)
			(bind ?cR 0)
			(if (member$ ?*azul3* ?bueno)
				then
					(bind ?cA (+ ?cA 1))
			)
			(if (member$ ?*azul3* ?fuerte)
				then
					(bind ?cR (+ ?cR 1))
			)
			(if (member$ ?*azul3* ?debil)
				then
					(bind ?cR (- ?cR 1))
			)
			(modify ?registro (prioridadA (+ ?prA ?cA)) (prioridadR (+ ?prR ?cR))) ;sumo o resto la prioridad por color
		)
)

(defrule Jugador3-Rojo "Seleccion del Jugador 3 - equipo Rojo"
	(declare (salience 50))
	=>
		(bind ?*index* 0)
		(IngresarRojo 3)
)

(defrule Jugador3-Rojo-Asig "Asignamos el campeon del Rojo 3"
	(declare (salience 49))
	?registro <-(campeon (nombre ?nombre) (permitido 0))
	=>
		(if
			(= (str-compare ?nombre ?*camSel*) 0)
		then
			(modify ?registro (permitido 1))
			(bind ?*rojo3* ?nombre)
			(printout t crlf "Para el jugador 3 del equipo rojo, se asigno campeon: " ?*camSel* " rol: " ?*rolSel* crlf)
			(printout t "=-[~_-¯¯-_~]-==-[~_-¯¯-_~]-==-[~_-¯¯-_~]-==-[~_-¯¯-_~]-==-[~_-¯¯-_~]-==-[~_-¯¯-_~]-=" crlf)
			(printout t crlf)
		)
)

(defrule PR3 "Prioridad rojo 3"
	(declare (salience 48))
	?registro <-(campeon (nombre ?nombre) (bueno $?bueno) (fuerte $?fuerte) (debil $?debil) (permitido 0) (prioridadA ?prA) (prioridadR ?prR))
	=>
		(if (= ?*index* 0)
			then
				(bind ?*index* (fact-index ?registro))
				(bind ?*index* (+ ?*index* 1))
		)
		(bind ?index (fact-index ?registro))
		(if (<  ?index ?*index*)
			then
				(bind ?cA 0)
				(bind ?cR 0)
				(if (member$ ?*rojo3* ?bueno)
					then
						(bind ?cR (+ ?cR 1))
				)
				(if (member$ ?*rojo3* ?fuerte)
					then
						(bind ?cA (+ ?cA 1))
				)
				(if (member$ ?*rojo3* ?debil)
					then
						(bind ?cA (- ?cA 1))
				)
				(modify ?registro (prioridadA (+ ?prA ?cA)) (prioridadR (+ ?prR ?cR))) ;sumo o resto la prioridad por color
		)
)

(defrule Jugador4-Rojo "Seleccion del Jugador 4 - equipo Rojo"
	(declare (salience 40))
	=>
		(bind ?*index* 0)
		(IngresarRojo 4)
)

(defrule Jugador4-Rojo-Asig "Asignamos el campeon del Rojo 4"
	(declare (salience 39))
	?registro <-(campeon (nombre ?nombre) (permitido 0))
	=>
		(if
			(= (str-compare ?nombre ?*camSel*) 0)
		then
			(modify ?registro (permitido 1))
			(bind ?*rojo4* ?nombre)
			(printout t crlf "Para el jugador 4 del equipo rojo, se asigno campeon: " ?*camSel* " rol: " ?*rolSel* crlf)
			(printout t "=-[~_-¯¯-_~]-==-[~_-¯¯-_~]-==-[~_-¯¯-_~]-==-[~_-¯¯-_~]-==-[~_-¯¯-_~]-==-[~_-¯¯-_~]-=" crlf)
			(printout t crlf)
		)
)

(defrule PR4 "Prioridad rojo 4"
	(declare (salience 38))
	?registro <-(campeon (nombre ?nombre) (bueno $?bueno) (fuerte $?fuerte) (debil $?debil) (permitido 0) (prioridadA ?prA) (prioridadR ?prR))
	=>
		(if (= ?*index* 0)
			then
				(bind ?*index* (fact-index ?registro))
				(bind ?*index* (+ ?*index* 1))
		)
		(bind ?index (fact-index ?registro))
		(if (<  ?index ?*index*)
			then
				(bind ?cA 0)
				(bind ?cR 0)
				(if (member$ ?*rojo4* ?bueno)
					then
						(bind ?cR (+ ?cR 1))
				)
				(if (member$ ?*rojo4* ?fuerte)
					then
						(bind ?cA (+ ?cA 1))
				)
				(if (member$ ?*rojo4* ?debil)
					then
						(bind ?cA (- ?cA 1))
				)
				(modify ?registro (prioridadA (+ ?prA ?cA)) (prioridadR (+ ?prR ?cR))) ;sumo o resto la prioridad por color
		)
)

(defrule Jugador4-Azul "Seleccion del Jugador 4 - equipo azul"
	(declare (salience 30))
	=>
		(bind ?*index* 0)
		(IngresarAzul 4)
)

(defrule Jugador4-Azul-Asig "Asignamos el campeon del Azul 3"
	(declare (salience 29))
	?registro <-(campeon (nombre ?nombre) (permitido 0))
	=>
		(if
			(= (str-compare ?nombre ?*camSel*) 0)
		then
			(modify ?registro (permitido 1))
			(bind ?*azul4* ?nombre)
			(printout t crlf "Para el jugador 4 del equipo azul, se asigno campeon: " ?*camSel* " rol: " ?*rolSel* crlf)
			(printout t "=-[~_-¯¯-_~]-==-[~_-¯¯-_~]-==-[~_-¯¯-_~]-==-[~_-¯¯-_~]-==-[~_-¯¯-_~]-==-[~_-¯¯-_~]-=" crlf)
			(printout t crlf)
		)
)

(defrule PA4 "Prioridad azul 4"
	(declare (salience 28))
	?registro <-(campeon (nombre ?nombre) (bueno $?bueno) (fuerte $?fuerte) (debil $?debil) (permitido 0) (prioridadA ?prA) (prioridadR ?prR))
	=>
		(if (= ?*index* 0)
			then
				(bind ?*index* (fact-index ?registro))
				(bind ?*index* (+ ?*index* 1))
		)
		(bind ?index (fact-index ?registro))
		(if (<  ?index ?*index*)
			then
			(bind ?cA 0)
			(bind ?cR 0)
			(if (member$ ?*azul4* ?bueno)
				then
					(bind ?cA (+ ?cA 1))
			)
			(if (member$ ?*azul4* ?fuerte)
				then
					(bind ?cR (+ ?cR 1))
			)
			(if (member$ ?*azul4* ?debil)
				then
					(bind ?cR (- ?cR 1))
			)
			(modify ?registro (prioridadA (+ ?prA ?cA)) (prioridadR (+ ?prR ?cR))) ;sumo o resto la prioridad por color
		)
)

(defrule Jugador5-Azul "Seleccion del Jugador 5 - equipo azul"
	(declare (salience 20))
	=>
		(bind ?*index* 0)
		(IngresarAzul 5)
)

(defrule Jugador5-Azul-Asig "Asignamos el campeon del Azul 5"
	(declare (salience 19))
	?registro <-(campeon (nombre ?nombre) (permitido 0))
	=>
		(if
			(= (str-compare ?nombre ?*camSel*) 0)
		then
			(modify ?registro (permitido 1))
			(bind ?*azul5* ?nombre)
			(printout t crlf "Para el jugador 5 del equipo azul, se asigno campeon: " ?*camSel* " rol: " ?*rolSel* crlf)
			(printout t "=-[~_-¯¯-_~]-==-[~_-¯¯-_~]-==-[~_-¯¯-_~]-==-[~_-¯¯-_~]-==-[~_-¯¯-_~]-==-[~_-¯¯-_~]-=" crlf)
			(printout t crlf)
		)
)

(defrule PA5 "Prioridad azul 5"
	(declare (salience 18))
	?registro <-(campeon (nombre ?nombre) (bueno $?bueno) (fuerte $?fuerte) (debil $?debil) (permitido 0) (prioridadA ?prA) (prioridadR ?prR))
	=>
		(if (= ?*index* 0)
			then
				(bind ?*index* (fact-index ?registro))
				(bind ?*index* (+ ?*index* 1))
		)
		(bind ?index (fact-index ?registro))
		(if (<  ?index ?*index*)
			then
			(bind ?cA 0)
			(bind ?cR 0)
			(if (member$ ?*azul5* ?bueno)
				then
					(bind ?cA (+ ?cA 1))
			)
			(if (member$ ?*azul5* ?fuerte)
				then
					(bind ?cR (+ ?cR 1))
			)
			(if (member$ ?*azul5* ?debil)
				then
					(bind ?cR (- ?cR 1))
			)
			(modify ?registro (prioridadA (+ ?prA ?cA)) (prioridadR (+ ?prR ?cR))) ;sumo o resto la prioridad por color
		)
)

(defrule Jugador5-Rojo "Seleccion del Jugador 5 - equipo Rojo"
	(declare (salience 10))
	=>
		(bind ?*index* 0)
		(IngresarRojo 5)
)

(defrule Jugador5-Rojo-Asig "Asignamos el campeon del Rojo 5"
	(declare (salience 9))
	?registro <-(campeon (nombre ?nombre) (permitido 0))
	=>
		(if
			(= (str-compare ?nombre ?*camSel*) 0)
		then
			(modify ?registro (permitido 1))
			(bind ?*rojo5* ?nombre)
			(printout t crlf "Para el jugador 5 del equipo rojo, se asigno campeon: " ?*camSel* " rol: " ?*rolSel* crlf)
			(printout t "=-[~_-¯¯-_~]-==-[~_-¯¯-_~]-==-[~_-¯¯-_~]-==-[~_-¯¯-_~]-==-[~_-¯¯-_~]-==-[~_-¯¯-_~]-=" crlf)
			(printout t crlf)
		)
)


(defrule Terminar-Juego "Ya terminado el juego"
	(declare (salience 5))
	=>
		(printout t crlf)
		(printout t "**********************************************************" crlf)
		(printout t "*                ¡EL JUEGO HA TERMINADO!                 *" crlf)
		(printout t "*              ¿COMO TE FUE CON TU CAMPEON?              *" crlf)
		(printout t "**********************************************************" crlf)
		(printout t crlf "Ingresa tu respuesta por favor: (si/no)" crlf)
		(bind ?*resultado* (readline))
		(bind ?*index* 0)
		(bind ?*ban1* "") (bind ?*ban2* "") (bind ?*ban3* "") (bind ?*ban4* "") (bind ?*ban5* "") (bind ?*ban6* "")
		(bind ?*camSel* "")
		(bind ?*rolSel* "")
)	

(defrule BorrarTodo "Limpiamos los facts"
	(declare (salience 2))
	?registro <-(campeon (nombre ?nombre) (prioridad ?prioridad) (prioridadA ?prioridadA) (prioridadR ?prioridadR))
	=>
		(if (= ?*index* 0)
			then
				(bind ?*index* (fact-index ?registro))
				(bind ?*index* (+ ?*index* 1))
		)
		(bind ?index (fact-index ?registro))
		(if (<  ?index ?*index*)
			then
			(if (eq ?*jugador* ?nombre)
			then
				(if (eq ?*resultado* "si")
				then
					(modify ?registro (permitido 0) (prioridadA (+ ?prioridadA 1)) (prioridadR (+ ?prioridadR 1)) (prioridad (+ ?prioridad 1)))
				else
					(modify ?registro (permitido 0) (prioridadA (- ?prioridadA 1)) (prioridadR (- ?prioridadR 1)) (prioridad (- ?prioridad 1)))
				)
			else
				(modify ?registro (permitido 0) (prioridadA 0) (prioridadR 0))
			)
		)
)

(defrule Guardar-Facts "Puede ser opcional, se guardan los hechos en un archivo para ser accedido despues!"
	(declare (salience 1))
	=>
		(save-facts "C:/IA/Campeones-Save.lsp")
		(printout t "")
)